0%

Web 页面打开 APP 方式总结

🌐 通用方案 URL Scheme

学术派,了解什么是 URL Scheme

URL(Uniform Resource Locator)是指定在互联网上可以找到资源的位置的文本字符串

通常可以分成三个部分:方案(Scheme)、主机(host)、路径(path)

HTTP 权威指南 - URL

当应用程序得到一个 URL 时,通过对它的解析,就知道去哪个地方、什么位置获取资源,同时用哪种方式去处理这个资源

例如当浏览器处理 https://lleohao.github.io/archives/ 这个 URL 时,它就会以 http 协议的方式去lleohao.github.io 这个域名所对应的主机下找寻 /archives/ 位置的文档

互联网上的资源不仅仅指的是网页、图片、视频等文件,我们的 App 和 App 中的功能同样也可以视作一个资源

当 APP 在用户的设备上安装时,其可以在系统注册某个协议,如知乎所注册的就是 zhihu

用户访问 zhihu://articles/{id} 这个 URL 时就可以访问到知乎对应的文章页面

Web 页面如何调用 URL Scheme

URL Scheme 测试网页

URL Scheme 可以视作普通的 URL 链接,直接按照链接方式来使用

  1. 使用 a 标签

    1
    <a href="zhihu://articles/296580539"></a>
  2. 设置 location.href

    1
    2
    3
    function openApp() {
    location.href = "zhihu://articles/296580539";
    }
  3. 使用 window.open 会怎样?

    🛑 不要使用 window.open ,IOS 可以正常的开启 App,Android 上可能无法冷启动 App (oppo 浏览器)

URL Scheme 的缺陷

  • 打开 App 前会有二次确弹窗,体验不够流畅

    IOS 二次提示弹窗

  • 无法判断拉端是否成功

    • 已安装应用,弹出二次提示,但是无法获取用户最终点击了按钮

    • 未安装应用

      • IOS 提示网址无效

        IOS 显示网址无效

      • Android 页面无任何反应

  • 存在安全风险

    由于 URL Scheme 的不唯一性,存在恶意的 App 伪造其它 App 的 URL Scheme,存在安全风险

总结来说,由于二次确认弹窗的存在,造成了体验的分割,不够流畅

其次是无法获取弹窗的响应状态(用户是否确认、取消)及未安装 App 状态,无法针对用户的响应作出对应的处理

👏 体验更好的方案

针对 URL Scheme 存在的问题,IOS (Universal Link)和 Android (Android Applink)都给出了对应的解决方案

为描述的方便,下文中的 Universal Link 指的是 IOS 下的 Universal Link 和 Android 下的 Android Applink

简单来说,可以将 Universal Link 理解成被 App 注册的 https 链接

当 App 安装时,系统会去注册的 https 链接的域名下检查是否存在相关的验证的文件,如果存在,那么以后浏览器在处理该域名的下的链接时就会调用对应的 App 的做处理

Universal Link 工作流程

  • 体验好:没有二次的弹窗提示,可以流畅的开启客户端;在没有安装 App 时,也可以向正常的链接一样工作,不影响用户的浏览
  • 安全:需要在 App 上配置域名,且在安装后系统验证 Universal Link 需要验证对应域名下是否存在说明文件,保证只有该 App 的管理员才能做此操作
  • 突破封锁:IOS 下 **Universal Link 可以突破微信限制在其 Webview 中拉端的限制;Android 未测试**

💯 实践案例

以知乎的首页的 “打开 APP” 的功能进行分析

IOS

由于 IOS 上对于的 Universal Link 的处理需要在跨域时才能生效(未跨域时按照正常的链接处理),所以知乎以 [https://oia.zhihu.com](https://oia.zhihu.com) 作为打开 App 的目标链接

IOS 知乎拉端流程

Android

Android 上没有跨域的限制,可以访问主域名下的地址

Android 知乎拉端流程

相关链接

Universal Links - Apple Developer

Android Applinks